// 类封装 可以把所有方法封装到一起，内聚性更强
// 只是localstoreage
// class Cache {
//   // 设置缓存
//   setCache(key: string, value: any) {
//     if (value) {
//       localStorage.setItem(key, JSON.stringify(value))
//     }
//   }
//   getCache(key: string) {
//     const value = localStorage.getItem(key)
//     if (value) {
//       return JSON.parse(value)
//     }
//   }
//   removeCache(key: string) {
//     localStorage.removeItem(key)
//   }
//   clear() {
//     localStorage.clear()
//   }
// }
// export default new Cache()

// 枚举 规定的是值
enum CacheType {
  Local,
  Session
}

class Cache {
  storage: Storage
  constructor(type: CacheType) {
    this.storage = type === CacheType.Local ? localStorage : sessionStorage
  }
  // 设置缓存
  setCache(key: string, value: any) {
    this.storage.setItem(key, JSON.stringify(value))
  }
  getCache(key: string) {
    const value = this.storage.getItem(key)
    if (value) {
      return JSON.parse(value)
    }
  }
  removeCache(key: string) {
    this.storage.removeItem(key)
  }
  clear() {
    this.storage.clear()
  }
}

const localCache = new Cache(CacheType.Local)
const sessionCache = new Cache(CacheType.Session)

export { localCache, sessionCache }
